/**
 * 该文件定义Action类型的Jsp所提供的操作框架
 * 对于一个表单的递交操作，其最终是否成功，以及应该显示什么给操作者看
 * 都使用该文件中的默认函数
 * @author: TANTOM
 * @date: 2003-11-25 16:54
 * @note: 头嗡一声..
 */
function ActionFrameWork() {
	/**
	 * action处理的页面结束后会执行该操作
	 */
	this.loaded = loaded;

	function loaded() {
	  if (__isWOpenWin() && !__isJwindow()) {
      var msg = document.body.getAttribute("tt.msg");
      if (msg!=null) {
        alert(msg);
      }
      //对删除页面的处理
	    if (typeof(onWOpenDel)!="undefined") {	    	
	    	if (top==self) {
	    	  if (typeof(opener)!="undefined") {
	    	    opener.__wopenToDirty(window);
	    	    opener.__onOpenWinClose();
	    	    opener.document.location.reload();
	    	  }
	    	  top.close();
	    	   return;
	    	}else {
          if (typeof(parent.opener)!="undefined") {
            parent.opener.__wopenToDirty(parent);//待办事宜新开窗口操作完后刷新待办事宜列表
            if(typeof(parent.opener.onDelDone)!="undefined"){
               parent.opener.onDelDone(); //查询新开窗口操作完后刷新查询列表
            }
          }
          top.close();          
        }
	    }//end 删除页面的处理
	    if (typeof(window.afterWSuccess)!="undefined") {	      
	      window._win = parent;
	      window._wopener = parent.opener;
	      try { //原窗口变了
	        window.afterWSuccess();
	      }catch(e) {
	        window._win.close();	        	        
	      }
	    }else { //没有afterWSuccess就执行actionSuccess
	      window._win = parent;
	      window._wopener = parent.opener;
	      try { //原窗口变了
	        window.actionSuccess();
	      }catch(e) {
	        window._win.close();	        	        
	      }
	    }
	    return;
	  }
		var result = document.body.getAttribute("tt.action.result");		
		if (result!=null) { //当有该属性指定时
			result = result=="true"?true:false;
			if (result) { //如果成功回调页面中的 actionSuccess 方法
			  if (typeof(top._isModalWin)!='undefined') {
			    if (window.afterSuccess!=null) {
			      window.afterSuccess();
			      return;
			    }
			    if (window.actionSuccess!=null) {
			      window.actionSuccess();
			      return;
			    }
			    return;
			  }
				//显示操作结束的提示信息
				var msg = document.body.getAttribute("tt.msg");
				if (msg!=null) {
				  if (document.body.getAttribute("tt.alert")=="true") {
				    alert(msg);
				  }else {
					__alert(msg);
			      }
				}
				if (window.actionSuccess!=null) {
					//调用前会先检查是否属于内部窗口，如果是就先关内部窗口
					if (window.parent.parent!=null) {	
						if (window.parent.parent.__close!=null) {	
							if (window.parent.parent.__isOpen()) {
							  if (document.body.getAttribute("tt.notclose")==null) {
							      if (window.afterSuccess!=null) {
							        if (window.afterSuccess.toString().indexOf("location")==-1) { //如果子窗口有指定页面跳转就不处理
							          window.parent.parent.__close();
							        }
							      }
								}
								actionWinProcess();
							}else {
								actionProcess();
							}
						}else {
							actionProcess();
						}
					}else {
						actionProcess();
					}
				}else {
          if (window.parent.parent.__close!=null) {
              if (window.parent.parent.__isOpen()) {
                  //window.parent.parent.__close();
                  actionWinProcess();
              }
           }
				}
			}else { //如果失败回调页面中的 actionFail 方法
				if (window.actionFail!=null) {
					window.actionFail();
				}
			}
		}

		if (__isDialog()) {
		  if (typeof(window.onDialogSuccess)!="undefined") {
		    window.onDialogSuccess();
		  }
		}
	};
	
	/** 子action操作完成后执行的操作 */
	function actionWinProcess() {
		if (window.afterSuccess!=null) {
			window.afterSuccess();
		}
	}

	/** 执行非子窗口的处理 */
	function actionProcess() {
	  window.actionSuccess();
	}
}

/**
 * 提示信息的接口，显示给用户看到信息
 * 统一调用该方法来显示提示信息，为以后提示信息总接口改了后也能一把变化
 */
function __alert($msg) {
  var p = window.parent;
  if (p==null) {
    p = window;
  }
  if (typeof(top.__popup)!="undefined") {
    top.__popup($msg, 1.5, p);
  }else {
    alert($msg);
  }
}

/**
 * 统一的错误显示窗口
 */
function __error($msg) {
	alert($msg);
}


/**
 * call and event, if the event exist
 */
function __invoke($win, $fct, $val) {
  var fct = eval("$win." + $fct);
  if (typeof(fct)!="undefined") {
    go();
  }
  function go() {
    fct($val);
  }
}

//是否通过window.open打开的窗口
function __isWOpenWin() {
  if (__isDialog()) {
    return false;
  }
  if (typeof(top._bMain)=="undefined") {
    return true;
  }
  return false;
}

function __isDialog() {
  return top._type=="dialog";
}

/**
 * check it self it's in an jwin
 */
function __isJwindow() {
  if (parent.parent.STATICCLASS_JWINDOW!=null) {
    return parent.parent.STATICCLASS_JWINDOW.isOpen();
  }
  return parent.document.body.getAttribute("tt.isJwindow")=="true";
}



var _ActionFrameWork = new ActionFrameWork();
window.attachEvent("onload", _ActionFrameWork.loaded);

var _parent = window.parent.parent;
//统一使用该方法来处理页面的跳转，在页面地址改变后用户不能按后退回到之前的数据填写页面
function __jumpPage($win, $url) {  
    $win.location.replace($url);
}

//先封装入口代替原有的 $win.document.location.reload()
function __jumpReload($win) {       
    $win.location.reload();
}